package com.southminority.ethnic.service.contact;

import com.southminority.ethnic.controller.contact.vo.ContactInfoVO;
import com.southminority.ethnic.common.result.PageResult;
import java.util.List;

/**
 * 联系信息服务接口
 * 
 * @author SouthMinority
 */
public interface ContactInfoService {

    // ==================== 前端展示接口 ====================

    /**
     * 获取公开显示的联系信息列表
     * @return 联系信息列表，按显示顺序排序
     */
    List<ContactInfoVO> getPublicContactInfoList();

    /**
     * 根据类型获取联系信息
     * @param type 联系方式类型
     * @return 联系信息列表
     */
    List<ContactInfoVO> getContactInfoByType(String type);

    /**
     * 获取主要联系方式
     * @return 主要联系信息列表
     */
    List<ContactInfoVO> getPrimaryContactInfo();

    /**
     * 根据ID获取联系信息详情
     * @param id 联系信息ID
     * @return 联系信息详情
     */
    ContactInfoVO getContactInfoDetail(Long id);

    // ==================== 管理端接口 ====================

    /**
     * 分页查询联系信息
     * @param current 当前页
     * @param size 每页大小
     * @param keyword 关键词
     * @param type 类型
     * @param status 状态
     * @return 分页结果
     */
    PageResult<ContactInfoVO> getContactInfoPage(Long current, Long size, String keyword, String type, Integer status);

    /**
     * 获取所有联系信息列表
     * @return 所有联系信息
     */
    List<ContactInfoVO> getAllContactInfoList();

    /**
     * 根据ID获取联系信息
     * @param id 联系信息ID
     * @return 联系信息
     */
    ContactInfoVO getContactInfoById(Long id);

    /**
     * 创建联系信息
     * @param contactInfo 联系信息数据
     * @return 创建的联系信息
     */
    ContactInfoVO createContactInfo(ContactInfoVO contactInfo);

    /**
     * 更新联系信息
     * @param id 联系信息ID
     * @param contactInfo 联系信息数据
     * @return 更新的联系信息
     */
    ContactInfoVO updateContactInfo(Long id, ContactInfoVO contactInfo);

    /**
     * 删除联系信息
     * @param id 联系信息ID
     * @return 是否删除成功
     */
    Boolean deleteContactInfo(Long id);

    /**
     * 批量删除联系信息
     * @param ids 联系信息ID列表
     * @return 是否删除成功
     */
    Boolean batchDeleteContactInfo(List<Long> ids);

    /**
     * 更新联系信息状态
     * @param id 联系信息ID
     * @param status 状态
     * @return 是否更新成功
     */
    Boolean updateContactInfoStatus(Long id, Integer status);

    /**
     * 设置主要联系方式
     * @param id 联系信息ID
     * @param isPrimary 是否主要
     * @return 是否设置成功
     */
    Boolean setPrimaryContactInfo(Long id, Integer isPrimary);

    /**
     * 设置公开显示
     * @param id 联系信息ID
     * @param isPublic 是否公开
     * @return 是否设置成功
     */
    Boolean setPublicContactInfo(Long id, Integer isPublic);

    /**
     * 更新显示顺序
     * @param id 联系信息ID
     * @param displayOrder 显示顺序
     * @return 是否更新成功
     */
    Boolean updateDisplayOrder(Long id, Integer displayOrder);

} 
